#ifndef TASK_H
#define TASK_H

#include <string>
#include <chrono>
#include <ctime>
#include <iomanip>
#include <sstream>

/**
 * @brief 任务优先级枚举
 */
enum class Priority {
    LOW,
    MEDIUM,
    HIGH,
};

/**
 * @brief 任务类
 * 
 * 表示一个待办事项，包含任务描述、优先级和截止日期
 */
class Task {
public:
    /**
     * @brief 构造函数
     * @param id 任务ID
     * @param description 任务描述
     * @param priority 任务优先级
     * @param dueDate 截止日期 (格式: YYYY-MM-DD)
     */
    Task(int id, const std::string& description, Priority priority, const std::string& dueDate);

    int getId() const;
    std::string getDescription() const;
    Priority getPriority() const;
    std::string getDueDate() const;

    /**
     * @brief 设置任务描述
     * @param description 新的任务描述
     */
    void setDescription(const std::string& description);
    
    /**
     * @brief 设置任务优先级
     * @param priority 新的优先级
     */
    void setPriority(Priority priority);
    
    /**
     * @brief 设置截止日期
     * @param dueDate 新的截止日期 (格式: YYYY-MM-DD)
     */
    void setDueDate(const std::string& dueDate);
    
    /**
     * @brief 将任务转换为字符串表示
     * @return std::string 格式化后的任务信息
     */
    std::string toString() const;
    
    /**
     * @brief 将优先级枚举转换为字符串
     * @param priority 优先级枚举值
     * @return std::string 优先级字符串表示
     */
    static std::string priorityToString(Priority priority);
    
    /**
     * @brief 将字符串转换为优先级枚举
     * @param priorityStr 优先级字符串
     * @return Priority 优先级枚举值
     */
    static Priority stringToPriority(const std::string& priorityStr);
    
private:
    int _id;                       // < 任务ID
    std::string _description;     // < 任务描述
    Priority _priority;          // < 任务优先级
    std::string _dueDate;       // < 截止日期 (YYYY-MM-DD)
    
    /**
     * @brief 验证日期格式
     * @param date 日期字符串
     * @return bool 是否有效
     */
    bool isValidDate(const std::string& date) const;
};







#endif // TASK_H